1.5.1条件三元运算符
Verilog 有一个类似 C 语言的三元条件操作符(? :):
(condition ? if_true : if_false)//(条件 ? 如果为真时的值 : 如果为假时的值)
这个操作符可以用来基于一个条件(就像一个多路复用器!)在一行代码中选择两个值中的一个,而不需要在组合逻辑 always 块中使用 if-then 语句。
示例:
(0 ? 3 : 5) // 这是 5,因为条件为假。
(sel ? b : a) // 由 sel 选择的一个从 a 和 b 之间的2选1多路复用器。
always @(posedge clk) // 一个 T 触发器。
q <= toggle ? ~q : q;
always @(*) // 一个单输入有限状态机的状态转移逻辑
case (state)
A: next = w ? B : A;
B: next = w ? A : B;
endcase
assign out = ena ? q : 1'bz; // 一个三态缓冲器
((sel[1:0] == 2'h0) ? a : // 一个3选1的多路复用器
(sel[1:0] == 2'h1) ? b :
c )
实践应用:
给定四个无符号数,找出最小值。无符号数可以使用标准比较运算符(a < b)进行比较。使用条件操作符创建两路最小电路,然后组合几个这样的电路来构建一个四路最小值电路。你可能需要一些中间结果的线网向量。
模块声明
module top_module (
input [7:0] a, b, c, d,
output [7:0] min);